package com.example.test.controller;

import com.example.test.DAO.BaseDAO;
import com.example.test.Utils.DBUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.web.bind.annotation.*;

import java.sql.Connection;
import java.sql.SQLException;

/**
 * Spring中的四个注解(Spring底层不会验证,默认组件名为类名首字母小写,可加("")改组件默认名)
 * @Controller 控制器层(Servlet包下的)组件添加注释
 * @Service 业务逻辑层(Service包下的)组件添加注释
 * @Repository 数据库层(DAO包下的)组件添加注释
 * @Component 给不属于以上层的添加组件
 * context:component-scan base-package=""自动扫描组件 基础包内加了注释的类
 * context:exclude/include-filter type="annotation"/"assignable" expression=“”自动扫描时排除/指定组件 指定规则/具体类 注解/类全名
 * RestController=Controller+ResponseBody
 * @Qualifier("baseDAO") 指定id替代默认的变量名,也可以放在参数列表中
 * @Autowired(required=false) 自动装配注释,设置找不到组件时设置为null,不写默认true找不到时会抛异常
 *                            写在方法上时,方法会在bean创建时自动运行,并且将方法上的每个参数都会自动注入值
 * @Autowired :spring的标准,性能最强大但是只能spring使用
 * @Resource :j2ee,java的标准,性能弱但是扩展性更强
 * @inject
 * 请求的接受处理
 * @RequestMapping
 * @GetMapping
 * @PostMapping
 * @PutMapping
 * @DeleteMapping
 * 请求的获取
 * @PathVariable("") 获取链接上的参数
 * @RequestParam(value ="",required=true,defaultValue="")获取返回的参数,required参数是(默认)否必须,defaultValue默认值(null)
 * @RequestHeader() 获取请求头的参数
 * @CookieValue() 获取Cookie
 *
 *
 */
@RestController
@Component
@RunWith(SpringJUnit4ClassRunner.class)
public class UserController {

    @Autowired(required = false)
    private BaseDAO baseDAO;
    //1.用户注册
    @RequestMapping(path = "/reg",produces = "text/html;charset=utf-8")
    public String regist(String username,String password){
        String sql="insert into user(id,username,password)values(null,?,?)";
        int update =baseDAO.update(sql, username, password);
        System.out.println(update);
        if(update==1){
            return "注册成功";
        }else {
            return "注册失败";
        }
    }
    //2.用户登录
    @RequestMapping( path = "/log",produces = "text/html;charset=utf-8")
    public String query(String username,String password){
        String sql="select id,username,password from user where username=? and password=?";
        int update = update(sql, username, password);
        System.out.println(update);
        if(update==1){
            return "登陆成功";
        }else {
            return "用户不存在";
        }
    }
    //3.删除用户
    @RequestMapping(path = "/del",produces = "text/html;charset=utf-8")
    public String delete(String username,String password){
        String sql="delete from user where username=? and password=?";
        int update = update(sql, username, password);
        System.out.println(update);
        if(update==1){
            return "删除成功";
        }else {
            return "删除失败";
        }
    }
    //4.更新用户
    public int update( String sql, Object...args){
        QueryRunner queryRunner = new QueryRunner();
        Connection con=null;
        try {

            con = DBUtils.getCon();
            return queryRunner.update(con,sql,args);
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            DBUtils.close(con);
        }
        return 0;
    }
}
